//
//  LauStatusListViewModel.swift
//  SwiftProject
//
//  Created by Lausen on 2017/7/31.
//  Copyright © 2017年 id. All rights reserved.
//

import Foundation

/// 如果没有数据了,最大的上拉次数
private let maxPullUpCount = 3

class LauStatusListViewModel {
    
    /// 懒加载一个模型数组
    lazy var listStatus = [LauStatus]()
    
    private var maxErrorTimes = 0;
    
    func statusList(isPullUp: Bool,completion: @escaping(_ isSuccess: Bool,_ shouldRefresh: Bool) -> ()) -> Void {
        
        /// 如果上拉的但是没有数据返回来,那么最多只有三次机会,超过三次机会就不给上拉了
        if isPullUp && maxErrorTimes >= 3 {
            
            completion(true,false)
            
            return
        }
        
        //如果是上拉,就让since_id就为零
        let since_id = isPullUp ? 0 : self.listStatus.first?.id ?? 0
        /// 如果是不是上拉,就让max_id为数组里面最后一个模型的id否则也为0
        let max_id = !isPullUp ? 0 : self.listStatus.last?.id ?? 0
        
        //请求微博数据
        LauNetworkManager.shared.statusList(since_id: since_id,max_id: max_id) { (list, isSuccess) in
            
            /// 守护一下,让字典转模型的数组有数据
            guard let array = NSArray.yy_modelArray(with: LauStatus.self, json: list ?? []) as? [LauStatus] else{
                
                completion(isSuccess,false)
                
                return
            }
            
            print("返回了\(array.count)条数据")
            
            if !isPullUp{
                
                self.listStatus = array + self.listStatus
                
            }else{
                
                self.listStatus = self.listStatus + array
            }
            
            
            /// 如果是上拉,并且返回来的数组个数位0,那么就使用失败的回调,
            if isPullUp && array.count == 0{
                
                self.maxErrorTimes += 1
                
                completion(isSuccess,false)
                
            }else{
                
                completion(isSuccess,true)
            }
        }
    }
}
